package com.ruoyi.activiti;

import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Slf4j
public class DeployBpmn {
    private static final Logger logger = LoggerFactory.getLogger(DeployBpmn.class);


    /**
     * @PostConstruct 表示该方法会在该 Bean 初始化完成后自动执行
     * 此时 Spring 上下文已初始化，RepositoryService 可用
     * 适合用来做应用启动后的初始化操作，比如部署 BPMN
     */
    @PostConstruct
    public void deployBpmnFiles() {
        final RepositoryService repositoryService = SpringUtils.getBean(RepositoryService.class);
        try {
            logger.info("开始部署 BPMN 文件...");

            // 部署单个 BPMN 文件
            Deployment deployment = repositoryService.createDeployment()
                    .name("My Process Deployment - 启动时自动部署") // 自定义部署名称
                    .addClasspathResource("bpmn/leave-countersign.bpmn") // 你的 bpmn 文件路径
                    // 如果还有其他的 bpmn 文件，可以继续追加：
                    // .addClasspathResource("processes/another.bpmn")
                    .deploy();

            // 打印部署结果
            logger.info("✅ BPMN 文件部署成功！");
            logger.info("部署ID: {}", deployment.getId());
            logger.info("部署名称: {}", deployment.getName());
            logger.info("部署时间: {}", deployment.getDeploymentTime());

        } catch (Exception e) {
            logger.error("❌ BPMN 文件部署失败！", e);
        }
    }

}
